﻿#region using statements

using Microsoft.Xna.Framework.Input;

using Nuclex.Input;

#endregion

namespace NGen.Managers.Input
{
	/// <summary>
	/// 	Interface to allow objects to register for keyboard events
	/// </summary>
	public interface IKeyboardListener
	{
		/// <summary>
		/// 	Called when a key is pressed
		/// </summary>
		/// <param name = "p_key">the key pressed</param>
		void KeyPressed(Keys p_key);

		/// <summary>
		/// 	Called when a key is released
		/// </summary>
		/// <param name = "p_key">the key released</param>
		void KeyReleased(Keys p_key);
	}

	/// <summary>
	/// 	Interface to allow objects to register for mouse events
	/// </summary>
	public interface IMouseListener
	{
		/// <summary>
		/// 	Called when a mouse button is pressed
		/// </summary>
		/// <param name = "p_button">the button pressed</param>
		void MousePressed(MouseButtons p_button);

		/// <summary>
		/// 	Called when a mouse button is released
		/// </summary>
		/// <param name = "p_button">the button released</param>
		void MouseReleased(MouseButtons p_button);

		/// <summary>
		/// 	Called when the mouse is moved
		/// </summary>
		/// <param name = "p_x">x coordinate of the mouse cursor</param>
		/// <param name = "p_y">y coordinate of the mosue cursor</param>
		void MouseMoved(float p_x, float p_y);

		/// <summary>
		/// 	Called when the mouse wheel is scrolled
		/// </summary>
		/// <param name = "p_ticks">number of ticks the wheel is scrolled</param>
		void MouseWheelScroll(float p_ticks);
	}

	//NOT IMPLEMENTED IN THIS VERSION
	//public interface IGamepadListener
	//{
	//    void ButtonPressed(Buttons button);
	//    void ButtonReleased(Buttons button);
	//}
}